/**
 * 
 */
package com.mc.easyexcel.write;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.apache.poi.ss.util.CellRangeAddress;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;

/**
 * 不创建对象的写
 * @author w.weizhen
 */
public class NoModelWrite {
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		noModelWrite();
	}
	
    /**
     * 不创建对象的写
     */
    public static void noModelWrite() {
    	List<List<String>> head = new ArrayList<List<String>>();//标题
    	head.add(Arrays.asList("上报时间","上报时间"));//合并两行
    	List<List<Object>> datas = new ArrayList<List<Object>>();//数据
    	
    	List<Object> data1 = new ArrayList<Object>();
    	List<Object> data2 = new ArrayList<Object>();
    	List<Object> data3 = new ArrayList<Object>();
    	List<Object> data11 = new ArrayList<Object>();
    	List<Object> data21 = new ArrayList<Object>();
    	List<Object> data31 = new ArrayList<Object>();
    	data1.add(new Date());
    	data2.add(new Date());
    	data3.add(new Date());
    	data11.add(new Date());
    	data21.add(new Date());
    	data31.add(new Date());
        for (int i = 0; i < 5; i++) {
        	int index = (int) (Math.random() * (4 - 2) + 2);
        	for (int j = 0; j < index; j++) {
        		List<String> headTitle = new ArrayList<String>();
            	headTitle.add("项:"+i);
        		headTitle.add("值:"+i+""+j);
        		head.add(headTitle);
        		
        		data1.add("1展:"+i+""+j);
        		data2.add("2展:"+i+""+j);
        		data3.add("3展:"+i+""+j);
        		data11.add("1展:"+i+""+j);
        		data21.add("2展:"+i+""+j);
        		data31.add("3展:"+i+""+j);
			}
		}
        datas.add(data1);
        datas.add(data2);
        datas.add(data3);
        datas.add(data11);
        datas.add(data21);
        datas.add(data31);
        System.out.println(head.toString());
        System.out.println(datas.toString());
        
        //定义合并单元格的坐标范围
        List<CellRangeAddress> cellRangeAddresss = new ArrayList<CellRangeAddress>();
        //合并第第6行的第一列和第二列
        CellRangeAddress item1 = new CellRangeAddress(3, 7, 2, 2);
        cellRangeAddresss.add(item1);
        CellRangeAddress item2 = new CellRangeAddress(2, 7, 4, 4);
        cellRangeAddresss.add(item2);
        //定义合并单元格策略
        MyMergeStrategy myMergeStrategy = new MyMergeStrategy(cellRangeAddresss);
        
        //这里自定义一个单元格的格式(标黄的行高亮显示)
        Integer[] yellowRows = {7};
        Set<Integer> yellowRowsSet = new HashSet<>(Arrays.asList(yellowRows));
//        CustomCellWriteHandler customCellWriteHandler = new CustomCellWriteHandler(yellowRowsSet);

    	// 写法1
        String fileName = "D:/hynetic/"+System.currentTimeMillis()+".xlsx";
        // 这里 需要指定写用哪个class去写，然后写到第一个sheet，名字为模板 然后文件流会自动关闭
        EasyExcel.write(fileName).head(head)
        //自动列宽(不太精确)
        .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
        //注册单元格式
//        .registerWriteHandler(customCellWriteHandler)
        //注册合并策略
        .registerWriteHandler(myMergeStrategy)
        .sheet("模板").doWrite(datas);
        
    }
    //表头
    private static List<List<String>> head() {
    	List<List<String>> headList = new ArrayList<List<String>>();
    	headList.add(Arrays.asList("上报时间","上报时间"));
        for (int i = 0; i < 5; i++) {
        	int index = (int) (Math.random() * (4 - 2) + 2);
        	for (int j = 0; j < index; j++) {
        		List<String> headTitle = new ArrayList<String>();
            	headTitle.add("项:"+i);
        		headTitle.add("值:"+i+""+j);
        		headList.add(headTitle);
			}
		}
        System.out.println(headList.toString());
    	return headList;
        
//    	List<String> headTitle0 = new ArrayList<String>();
//    	List<String> headTitle1 = new ArrayList<String>();
//        List<String> headTitle2 = new ArrayList<String>();
//        List<String> headTitle3 = new ArrayList<String>();
//        List<String> headTitle4 = new ArrayList<String>();
//        List<String> headTitle5 = new ArrayList<String>();
//        List<String> headTitle6 = new ArrayList<String>();
//        List<String> headTitle7 = new ArrayList<String>();
//        List<String> headTitle8 = new ArrayList<String>();
//        List<String> headTitle9 = new ArrayList<String>();
//        List<String> headTitle14 = new ArrayList<String>();
//        List<String> headTitle15 = new ArrayList<String>();
//        List<String> headTitle16 = new ArrayList<String>();
//        List<String> headTitle17 = new ArrayList<String>();
//        List<String> headTitle18 = new ArrayList<String>();
//        List<String> headTitle23 = new ArrayList<String>();
//        List<String> headTitle24 = new ArrayList<String>();
//        List<String> headTitle25 = new ArrayList<String>();
//
//        //设置第一列为项目导出标题
//        headTitle0.add("测试导出");
//        headTitle1.add("测试导出");
//        headTitle2.add("测试导出");
//        headTitle3.add("测试导出");
//        headTitle4.add("测试导出");
//        headTitle5.add("测试导出");
//        headTitle6.add("测试导出");
//        headTitle7.add("测试导出");
//        headTitle8.add("测试导出");
//        headTitle9.add("测试导出");
//        headTitle14.add("测试导出");
//        headTitle15.add("测试导出");
//        headTitle16.add("测试导出");
//        headTitle17.add("测试导出");
//        headTitle18.add("测试导出");
//        headTitle23.add("测试导出");
//        headTitle24.add("测试导出");
//        headTitle25.add("测试导出");
//
//        headTitle0.add("");
//        headTitle1.add("");
//        headTitle2.add("");
//        headTitle3.add("");
//        headTitle4.add("");
//        headTitle5.add("");
//        headTitle6.add("");
//        headTitle7.add("");
//        headTitle8.add("");
//        headTitle9.add("");
//        headTitle14.add("");
//        headTitle15.add("");
//        headTitle16.add("");
//        headTitle17.add("");
//        headTitle18.add("");
//        headTitle23.add("");
//        headTitle24.add("");
//        headTitle25.add("单位：元");
//
//        headTitle0.add("编号");
//        headTitle1.add("姓名");
//        headTitle2.add("年龄");
//        headTitle3.add("居住地");
//        headTitle4.add("父亲");
//        headTitle5.add("母亲");
//        headTitle6.add("工作单位");
//        headTitle7.add("工资");
//        headTitle8.add("转正前");
//        headTitle9.add("转正前");
//        headTitle14.add("转正前");
//        headTitle15.add("转正前");
//        headTitle16.add("平均工资");
//        headTitle17.add("转正后");
//        headTitle18.add("转正后");
//        headTitle23.add("转正后");
//        headTitle24.add("转正后");
//        headTitle25.add("平均工资");
//
//        headTitle0.add("编号");
//        headTitle1.add("姓名");
//        headTitle2.add("年龄");
//        headTitle3.add("居住地");
//        headTitle4.add("父亲");
//        headTitle5.add("母亲");
//        headTitle6.add("工作单位");
//        headTitle7.add("工资");
//        headTitle8.add("第一个月");
//        headTitle9.add("第一个月");
//        headTitle14.add("第二个月");
//        headTitle15.add("第二个月");
//        headTitle16.add("平均工资");
//        headTitle17.add("第一个月");
//        headTitle18.add("第一个月");
//        headTitle23.add("第三个月");
//        headTitle24.add("第三个月");
//        headTitle25.add("平均工资");
//
//        headTitle0.add("编号");
//        headTitle1.add("姓名");
//        headTitle2.add("年龄");
//        headTitle3.add("居住地");
//        headTitle4.add("父亲");
//        headTitle5.add("母亲");
//        headTitle6.add("工作单位");
//        headTitle7.add("工资");
//        headTitle8.add("日期");
//        headTitle9.add("金额");
//        headTitle14.add("日期");
//        headTitle15.add("金额");
//        headTitle16.add("平均工资");
//        headTitle17.add("日期");
//        headTitle18.add("金额");
//        headTitle23.add("日期");
//        headTitle24.add("金额");
//        headTitle25.add("平均工资");
//
//        //列数据保存
//        List<List<String>> headList = new ArrayList<List<String>>();
//        headList.add(headTitle0);
//        headList.add(headTitle1);
//        headList.add(headTitle2);
//        headList.add(headTitle3);
//        headList.add(headTitle4);
//        headList.add(headTitle5);
//        headList.add(headTitle6);
//        headList.add(headTitle7);
//        headList.add(headTitle8);
//        headList.add(headTitle9);
//        headList.add(headTitle14);
//        headList.add(headTitle15);
//        headList.add(headTitle16);
//        headList.add(headTitle17);
//        headList.add(headTitle18);
//
//        //临时插入(可动态获取)
//        List<String> maxList = new ArrayList<String>();
//        List<String> maxList2 = new ArrayList<String>();
//        maxList.add("测试导出");
//        maxList.add("");
//        maxList.add("转正后");
//        maxList.add("第二个月");
//        maxList.add("日期");
//        maxList.add("日期");
//
//        maxList2.add("测试导出");
//        maxList2.add("");
//        maxList2.add("转正后");
//        maxList2.add("第二个月");
//        maxList2.add("金额");
//        maxList2.add("金额");
//        headList.add(maxList);
//        headList.add(maxList2);
//        headList.add(headTitle23);
//        headList.add(headTitle24);
//        headList.add(headTitle25);
//        
//        System.out.println(headList);
//        
//        return headList;
    }
    //数据
    private static List<List<Object>> dataList() {
        List<List<Object>> list = new ArrayList<List<Object>>();
        for (int i = 0; i < 10; i++) {
            List<Object> data = new ArrayList<Object>();
            data.add("字符串" + i);
            data.add(new Date());
            data.add(0.56);
            list.add(data);
        }
        return list;
    }
}